package utiles;

import vue.VueCarte;

import metier.Carte;
import metier.Herbe;
import metier.Nouriturre;
import metier.Position;
import metier.Roche;


/**
 * Classe de parse du XML
 *
 * @author Thomas Folgueral
 * @author Julien Pernot
 * @author Guillaume Peyet
 * @author Guillaume Sainthillier
 */
public class CarteXMLHandler extends org.xml.sax.HandlerBase {

    private String node;
    private int longueur;
    private int largeur;
    private Carte carte;
    private int x = 0, y = 0;

    public CarteXMLHandler() {
        super();
    }
    
    public Carte getCarte()
    {
        return this.carte;
    }

    /**
     * Actions à réaliser sur les données
     *
     * @param caracteres
     * @param debut
     * @param plongueur
     */
    @Override
    public void characters(char[] caracteres, int debut, int plongueur) {
        String donnees = new String(caracteres, debut, plongueur);
        
        switch (node) {
            case "nom":
                carte = new Carte(donnees, longueur, largeur);
                break;
            case "sourceNourriture":
                carte.addElement(new Nouriturre(longueur, largeur, Integer.parseInt(donnees)), new Position(x, y));
                break;
            case "roche":
                carte.addElement(new Roche(longueur, largeur, Integer.parseInt(donnees)), new Position(x, y));
                break;
            case "herbe":
                carte.addElement(new Herbe(longueur, largeur, Integer.parseInt(donnees)), new Position(x, y));
                break;
            default:
                break;
        }
    }

    /**
     * Actions e realiser lors de la fin du document XML.
     */
    @Override
    public void endDocument() {
        FourmizLogger.debug(this, "Fin du parsing du document");
    }

    /**
     * Actions à réaliser lors de la detection de la fin d'un element.
     */
    @Override
    public void endElement(String name) {
        if (name.equals("case")) {
            if (x < (largeur - 1)) {
                x++;
            } else {
                x = 0;
                y++;
            }
        }
    }

    /**
     * Actions e realiser au debut du document.
     */
    @Override
    public void startDocument() {
        FourmizLogger.debug(this, "Debut du parsing du document");
    }

    /**
     * Actions a realiser lors de la detection d'un nouvel element.
     */
    @Override
    public void startElement(String name, org.xml.sax.AttributeList atts) {
        //si on lit le noeud "diffculte" on ne stock pas le noeud afin de pouvoir differencier l'herbe et les rochers
        if (!name.equals("difficulte") && !name.equals("quantite")) {
            node = name;
        }

        if (node.equals("carte")) {
            largeur = Integer.parseInt(atts.getValue(0));
            longueur = Integer.parseInt(atts.getValue(1));

        }

    }
}
